/*
 * Factory [ˈfæktri]工厂模式
 *   + 简单的工厂模式
 *   + JQ中的工厂模式
 */
// 项目：一个产品 调用数据库，根据量级或者需求等不同的因素，我们需要让产品切换调用到不同的数据库中 oracle sqlserver mysql  -> DB层，根据逻辑或者标识，能切换连接的数据库
// 工厂模式：工厂可以帮助我们实现调用的切换，或者实现一些中转的处理
//1.工厂模式的目的是为了实现解耦，将对象的创建和使用分开，即应用程序将对象的创建和初始化职责交给工厂对象。
//2.降低代码重复。通过统一将创建对象(公共方法)的代码放到工厂里面统一管理，可以减少代码的重复率，同时也方便维护
//3.工厂模式将创建和使用分离，使用者不需要知道具体的创建过程，只需要使用即可。

function factory(options) {
    options = options || {};
    let {
        type,
        payload
    } = options;
    if (type === 'array') {
        // 执行A，完成一个逻辑
        return;
    }
    // 执行B，完成另外的逻辑
}
factory({
    type: 'array',
    payload: 100
});

factory({
    type: 'object',
    payload: 'zhufeng'
});



(function () {
    var jQuery = function (selector, context) {
        // 创建init类的实例
        return new jQuery.fn.init(selector, context);
    };
    jQuery.fn = jQuery.prototype = {
        // ...
    };

    // 需要工厂的转换
    var init = jQuery.fn.init = function (selector, context, root) {};
    init.prototype = jQuery.fn;

    window.$ = jQuery;
})();
$('xxx'); //-> jQuery('xxx') 创建JQ类的实例，调取jQuery.fn原型上的方法


